/*
  Copyright (c) 2014 Dimitrij Gester

  "Smart RC TX" is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  "Smart RC TX" is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General
  Public License along with "Smart RC TX"; if not, write to the
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  Boston, MA  02111-1307  USA
*/

package com.codeplex.smartrctx.configurator.main.model.control_commands;

import java.util.ArrayList;
import java.util.List;

public abstract class TwoWayChannelSerializer extends BaseSerializer {

	public TwoWayChannelSerializer() {
		super();
	}

	protected void serializeChannels(byte function, Integer[][] channels) {
		for (byte channel = 0; channel < channels[0].length; channel++) {
			if (channels[0] != null && channels[0][channel] != null
					&& channels[1][channel] != null) {
				List<Byte> cmd = encodeChannel(function, channel,
						channels[0][channel], channels[1][channel]);

				addCRC(cmd);

				getCommandList().add(cmd);
			}
		}
	}

	protected List<Byte> encodeChannel(byte function, byte channel, int valueU,
			int valueD) {
		return createCommandSequence(function, channel, valueU, valueD);
	}

	protected List<Byte> createCommandSequence(byte function, byte channel,
			int valueUp, int valueDown) {
		ArrayList<Byte> seq = new ArrayList<Byte>();

		encodeValue(valueUp, seq, true);
		encodeValue(valueDown, seq, false);

		encodeCommitCommand(function, channel, seq);

		return seq;
	}

}